package com.wang.controller;

import com.wang.request.CartItemRequest;
import com.wang.service.CartService;
import com.wang.util.JsonData;
import com.wang.vo.CartItemVO;
import com.wang.vo.CartVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api(tags = "购物车模块")
@RestController
@RequestMapping("/api/cart/v1")
public class CartController {
    @Autowired
    private CartService cartService;

    @ApiOperation("添加商品到购物车")
    @PostMapping("/add")
    public JsonData addCart(
            @ApiParam("商品")
            @RequestBody(required = true)
            CartItemRequest cartItemRequest) {
        cartService.addToCart(cartItemRequest);
        return JsonData.buildSuccess();
    }

    @ApiOperation("清空购物车")
    @DeleteMapping("/clear")
    public JsonData clearCart() {
        cartService.clearCart();
        return JsonData.buildSuccess();
    }

    @ApiOperation("获取购物车详情")
    @GetMapping("/myCart")
    public JsonData findMyCart() {
        CartVO cartVO = cartService.getMyCart();
        return JsonData.buildSuccess(cartVO);
    }

    @ApiOperation("删除购物项")
    @DeleteMapping("/delete/{productId}")
    public JsonData deleteCartItem(
            @ApiParam(name = "productId", value = "商品id", required = true)
            @PathVariable Long productId) {
        cartService.deleteCartItem(productId);
        return JsonData.buildSuccess();
    }

    //TODO  这里有一个问题，如果传入的商品数量是负数，那么逻辑上有问题的，但是本代码中不会进行判断（没写判断逻辑）
    //TODO 当然可以添加一个判断的逻辑，但是有一个方法就是将hibernate的validator注解添加到CartItemRequest类中(这是一个依赖，添加后，就可以使用对应的注解)
    @ApiOperation("修改购物⻋商品数")
    @PostMapping("/upData")
    public JsonData updateCartItem(
            @ApiParam(name = "cartItemRequest", value = "购物项信息", required = true)
            @RequestBody CartItemRequest cartItemRequest) {
        cartService.upDataCartItemSum(cartItemRequest);
        return JsonData.buildSuccess();
    }

    /**
     * RPC——获取对应的商品项详情信息
     *
     * 会清空订单在购物车中对应的商品
     * @param productIdList
     * @return
     */
    @ApiOperation("RPC——获取对应的订单的商品信息")
    @PostMapping("/api/cart/v1/confirm_order_car_item")
    JsonData confirmOrderCarItem(@ApiParam("商品id列表")
                                 @RequestBody
                                 List<Long> productIdList) {
        List<CartItemVO> cartItemVOList = cartService.confirmOrderCartItems(productIdList);
        return JsonData.buildSuccess(cartItemVOList);
    }
}
